//引入两个模块：app 和 BrowserWindow

//app 模块，控制整个应用程序的事件生命周期。
//BrowserWindow 模块，它创建和管理程序的窗口。

const { app, BrowserWindow ,Tray, Menu, ipcMain, screen } = require('electron')
const path = require('path')
const iconPath = path.join(__dirname, './public/icon.png')   //应用运行时的标题栏图标
let mainWindow, tray,remindWindow
//在 Electron 中，只有在 app 模块的 ready 事件被激发后才能创建浏览器窗口
app.on('ready', () => {
  console.log('just test console.log')
  //创建一个窗口

  const win = {
    resizable: false,   //不允许用户改变窗口大小
    width: 800,        //设置窗口宽高
    height: 600,
    title: "Qolome Demo",
    // 无边框窗口
    // frame: false,
    icon: iconPath,     //应用运行时的标题栏图标
    webPreferences: {
      backgroundThrottling: false,   //设置应用在后台正常运行
      nodeIntegration: true,     //设置能在页面使用nodejs的API
      contextIsolation: false,
      preload: path.join(__dirname, './preload.js')

    }
  }
  mainWindow = new BrowserWindow(win)



  // mainWindow.setMenu(null)

  //窗口加载html文件
  mainWindow.loadURL(`file://${__dirname}/src/main.html`)


  tray = new Tray(iconPath)      //实例化一个tray对象，构造函数的唯一参数是需要在托盘中显示的图标url  
  
  tray.setToolTip('Qolome Demo')       //鼠标移到托盘中应用程序的图标上时，显示的文本

  tray.on('click', () => {       //点击图标的响应事件，这里是切换主窗口的显示和隐藏
    if(mainWindow.isVisible()){
      mainWindow.hide()
    }else{
      mainWindow.show()
    }
  })

  tray.on('right-click', () => {    //右键点击图标时，出现的菜单，通过Menu.buildFromTemplate定制，这里只包含退出程序的选项。
    const menuConfig = Menu.buildFromTemplate([
      {
        label: 'Quit',
        click: () => app.quit()
      }
    ])
    tray.popUpContextMenu(menuConfig)
  })

  // 渲染进程 TO 主进程  消费端
  ipcMain.on('wake:task', () => {
    createRemindWindow("定时任务已启动");
  })
  
})

function createRemindWindow (task) {
  remindWindow = new BrowserWindow({
    width: 200,        //设置窗口宽高
    height: 150,
     //options
     minimizable: false,
     maximizable: false,
  })

//获取屏幕尺寸
const size = screen.getPrimaryDisplay().workAreaSize
  
//获取托盘位置的y坐标（windows在右下角，Mac在右上角）
const { y } = tray.getBounds()

//获取窗口的宽高
const { height, width } = remindWindow.getBounds()

//计算窗口的y坐标
const yPosition = process.platform === 'darwin' ? y : y - height


  remindWindow.removeMenu();
  remindWindow.loadURL(`file://${__dirname}/src/remind.html`)
  //setBounds设置窗口的位置
  remindWindow.setBounds({
    x: size.width - width,     //x坐标为屏幕宽度 - 窗口宽度
    y: yPosition,
    height,
    width 
  })
  
  //当有多个应用时，提醒窗口始终处于最上层
  remindWindow.setAlwaysOnTop(true)


  // 提醒窗口会在一段时间后关闭，可以通过remindWindow.close()来关闭窗口。
// 当窗口关闭后，我们可以设置remindWindow = null来回收分配给该渲染进程的资源。
  remindWindow.on('closed', () => { remindWindow = null })

  //主进程发送消息给渲染进程
  remindWindow.webContents.send('setTask', task)

}
